#include "blockqueue.hpp"
#include "task.hpp"

void* productor(void* args)
{
    BlockQueue<task_t > * q = static_cast<BlockQueue<task_t >*>(args);
    //int i = 0, j = 0;
    while(true)
    {
        sleep(1);

        //std::cout << "生产者生产了一个数据: " << i << "," << j << std::endl;
        std::cout << "生产者派发了一个任务: "  << std::endl;
        
        q->Equeue(DownLoad);//传进去了一个函数指针，而task_t可以接收函数指针。
    }
    return nullptr;
}

void* consumer(void* args)
{
    BlockQueue<task_t > * q = static_cast<BlockQueue<task_t >*>(args);
    while(true)
    {
        task_t data = q->POP();
        //std::cout << "消费者消费了一个数据：" << data.Result() << std::endl;
        std::cout << "消费者执行了一个任务："  << std::endl;
        data();
    }
    return nullptr;
}



int main()
{
    BlockQueue<task_t >* bq = new BlockQueue<task_t>();

    pthread_t td1,td2;

    //创建线程1
    pthread_create(&td1,nullptr,productor,bq);

    //创建线程2
    pthread_create(&td1,nullptr,consumer,bq);
    
    //线程等待
    pthread_join(td1,nullptr);
    pthread_join(td2,nullptr);
    return 0;
}